À la fin de ce chapitre, vous
Association. Mesure pour quantifier la ressemblance (ou la différence) entre deux objets (échantillons) ou variables (descripteurs) numériques, \({\rm I\!R}\), d’abondance (\({\rm I\!N}\)), d’occurrence (\([0, 1]\)), de catégories, etc.
Mode R. Association entre variables (e.g. corrélation, covariance).
Mode Q. Association entre observations (e.g. similarité, distance).
La distance est de 0 pour des objets identiques et augmente avec la différence.
La similarité (= 1 - dissimilarité) est de 0 pour les objets n’ayant aucun lien et de 1 pour une association parfaite.
## # A tibble: 4 x 9
## `Bruant familie… `Citelle à poit… `Colibri à gorg… `Geai bleu`
## <dbl> <dbl> <dbl> <dbl>
## 1 1 1 0 3
## 2 0 0 1 2
## 3 0 0 0 0
## 4 3 0 0 0
## # … with 5 more variables: `Bruant chanteur` <dbl>, Chardonneret <dbl>,
## # `Bruant à gorge blanche` <dbl>, `Mésange à tête noire` <dbl>, `Jaseur
## # boréal` <dbl>
## # A tibble: 4 x 9
## `Bruant familie… `Citelle à poit… `Colibri à gorg… `Geai bleu`
## <dbl> <dbl> <dbl> <dbl>
## 1 1 1 0 1
## 2 0 0 1 1
## 3 0 0 0 0
## 4 1 0 0 0
## # … with 5 more variables: `Bruant chanteur` <dbl>, Chardonneret <dbl>,
## # `Bruant à gorge blanche` <dbl>, `Mésange à tête noire` <dbl>, `Jaseur
## # boréal` <dbl>
bray_curtis <- vegdist(abundance, method = "bray") # ?vegdist
pheatmap(bray_curtis, display_numbers = round(bray_curtis, 2)) # library("pheatmap")## Warning in if (display_numbers) {: la condition a une longueur > 1 et seul
## le premier élément est utilisé
Distance de Gower: Jaccard (occurrence et catégories) + Manhattan. –> voir notes de cours.
Catégoriser des objets qui n’appartiennent a priori à aucune catégori pour faire en sorte que les différences entre les groupes soient plus grande que les différences entre les objets d’un groupe.
Deux types:
Pour la plupart des algorithmes, les k-means se basent sur la distance euclidienne (mettre à l’échelle).
mcinnes_kmeans <- cascadeKM(df_mcinnes, inf.gr = 3, sup.gr = 10, criterion = "calinski")
plot(mcinnes_kmeans)dbscan: Density-Based Spatial Clustering of Applications with Noise Les groupes sont composés de zones où l’on retrouve plus de points (zones denses) séparées par des zones de faible densité.
Basé sur les matrices d’association, puis sur différentes approches.
Choix de la meilleure méthode: corrélation cophénétique –> voir les notes de cours.
mcinnes_hclust_distmat <- vegdist(df_mcinnes, method = "manhattan")
mcinnes_hclust <- hclust(mcinnes_hclust_distmat, method = "average")
plot(mcinnes_hclust)Idem dbscan, mais la distance critique est successivement augmentée.
Nombre minimum d’objets par groupe de 20 (minPts = 20).
Réduction d’axe pour mettre de l’ordre dans des données dont le nombre élevé de variables peut amener à des difficultés d’interprétaion.
| Méthode | Distance préservée | Variables |
|---|---|---|
| Analyse en composantes principales (ACP) | Distance euclidienne | Données quantitatives, relations linéaires (attention aux double-zéros) |
| Analyse de correspondance (AC) | Distance de \(\chi^2\) | Données non-négatives, dimentionnellement homogènes ou binaires, abondance ou occurence |
| Positionnement multidimensionnel (PoMd) | Toute mesure de dissimilarité | Données quantitatives, qualitatives nominales/ordinales ou mixtes |
Un sommaire d’un espace multidimensionnel en moindres dimensions (généralement 2). Les axes principaux sont orthogonales et construites par combinaisons linéaires des variables.
Explorer la variabilité des points, la redondance des variables, des potentiels regroupements, des valeurs aberrantes, etc.
iris_pca <- rda(iris %>% select(-Species), scale = TRUE)
par(mfrow = c(1, 2))
opl1 <- biplot(iris_pca, scaling = 1, main = "Biplot de distances") ; text(opl1, "species", col="red")
opl2 <- biplot(iris_pca, scaling = 2, main = "Biplot de corrélation") ; text(opl2, "species", col="red")Biplot de distance. Ce type de projection permet de visualiser la position des objets entre eux et par rapport aux descripteurs et d’apprécier la contribution des descripteurs pour créer les composantes principales.
Biplot de corrélation. Cette projection permet d’apprécier les corrélations entre les descripteurs. Pour ce faire, les objets et les valeurs propres doivent être transformés.
prop_expl <- iris_pca$CA$eig / sum(iris_pca$CA$eig)
tibble(rank = seq_along(prop_expl), cum_prop = cumsum(prop_expl)) %>%
ggplot(aes(x = rank, y = cum_prop)) + geom_col()Réduction pour les données d’abondance ou d’occurence.
vare_cca <- cca(abundance %>% filter(rowSums(.) > 0))
par(mfrow = c(1, 2))
plot(vare_cca, scaling = 1, main = "Biplot des espèces")
plot(vare_cca, scaling = 2, main = "Biplot des sites")Le biplot des espèces, à gauche (scaling = 1), montre la distribution des sites selon les espèces.
Le biplot des sites, à droite (scaling = 2), montre la distribution des recouvrements d’espèces selon les sites.
Le PoMd vise à représenter en un nombre limité de dimensions (souvent 2) la distance (ou dissimilarité) qu’ont les objets (ou des variables) les uns par rapport aux autres dans l’espace multidimensionnel.
pheatmap(bray_curtis %>% as.matrix(), cluster_rows = FALSE, cluster_cols = FALSE,
display_numbers = round(bray_curtis %>% as.matrix(), 2))ordiplot(scores(pcoa), type = 't', cex = 1.2)
text(spec_scores, row.names(spec_scores), col = "red", cex = 0.75)
Règle du pouce:
Présente la perspective selon laquelle les groupes sont les plus éclatés.
source("https://raw.githubusercontent.com/essicolo/AgFun/master/plotDA_gg.R")
plotDA(scores = iris_lda$li, loadings = iris_lda$fa, fac = iris$Species, level=0.95, facname = "Species", propLoadings = 1) ## Loading required package: ellipse
##
## Attaching package: 'ellipse'
## The following object is masked from 'package:graphics':
##
## pairs
## Loading required package: grid
## Loading required package: plyr
## -------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## -------------------------------------------------------------------------
##
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
## The following object is masked from 'package:purrr':
##
## compact
Résumer les relations linéaires entre des variables réponse et des variables explicatives.
vare_rda <- rda(varespec ~ ., data = varechem, scale = FALSE)
par(mfrow = c(1, 2))
ordiplot(vare_rda, scaling = 1, type = "text", main = "Scaling 1: triplot de distance")
ordiplot(vare_rda, scaling = 2, type = "text", main = "Scaling 2: triplot de corrélation")Triplot de distance. Les angles entre les variables explicatives représentent leur corrélation (non pas les angles entre variables réponse), et les distances entre les objets indiquent leurs distances euclidiennes.
Triplot de corrélation. Les angles entre les variables représentent leurs corrélation, que les variables soient réponse ou explicative, ou entre variables réponses et variables explicatives. Les distances entre les objets sur le triplot ne sont pas des approximation de leur distance euclidienne.
## Permutation test for rda under reduced model
## Terms added sequentially (first to last)
## Permutation: free
## Number of permutations: 999
##
## Model: rda(formula = varespec ~ N + P + K + Ca + Mg + S + Al + Fe + Mn + Zn + Mo + Baresoil + Humdepth + pH, data = varechem, scale = FALSE)
## Df Variance F Pr(>F)
## N 1 193.72 4.7667 0.011 *
## P 1 181.88 4.4753 0.017 *
## K 1 59.66 1.4681 0.242
## Ca 1 80.83 1.9890 0.124
## Mg 1 19.68 0.4842 0.721
## S 1 241.87 5.9515 0.003 **
## Al 1 173.36 4.2657 0.013 *
## Fe 1 47.25 1.1626 0.343
## Mn 1 22.58 0.5555 0.659
## Zn 1 33.69 0.8291 0.502
## Mo 1 169.55 4.1719 0.018 *
## Baresoil 1 87.99 2.1650 0.114
## Humdepth 1 106.06 2.6097 0.081 .
## pH 1 41.75 1.0273 0.388
## Residual 9 365.77
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Idem RDA, mais pour des données d’abondance et d’occurence.
doubs_cca <- cca(doubs_fish ~ ., data = doubs_env, scale = FALSE)
par(mfrow = c(1, 2))
ordiplot(doubs_cca, scaling = 1, type = "text", main = "CCA - Scaling 1 - Triplot de distance")
ordiplot(doubs_cca, scaling = 2, type = "text", main = "CCA - Scaling 2 - Triplot de corrélation")